/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mindbox.mueblesalpes.presentacion.sesion;

import com.mindbox.mueblesalpes.negocio.entity.CategoriaValor;
import com.mindbox.mueblesalpes.negocio.entity.Cliente;
import com.mindbox.mueblesalpes.negocio.entity.Compra;
import com.mindbox.mueblesalpes.negocio.entity.Mueble;
import com.mindbox.mueblesalpes.negocio.entity.Usuario;
import com.mindbox.mueblesalpes.negocio.entity.Venta;
import com.mindbox.mueblesalpes.negocio.compras.CarritoComprasLocal;
import com.mindbox.mueblesalpes.negocio.exception.ErrorTarjetaCredito;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;

/**
 * BackingBean de session. Para menajer el carrito.
 * Hace el enlace con el EJB Stateful
 * @author jsanchez
 */
public class SessionWeb {

    @EJB
    private CarritoComprasLocal carritoComprasBean;

    /** Creates a new instance of SessionWeb */
    public SessionWeb() {
    }

    /**
     * Inicializa la SessionWeb
     */
    @PostConstruct
    public void init() {
    }

    /**
     * Obtiene el mueble seleccionado.
     * @return Mueble
     */
    public Mueble getMuebleSeleccionado() {
        return this.carritoComprasBean.getMuebleSeleccionado();
    }

    /**
     * Coloca el mueble seleccionado.
     * @param muebleSeleccionado
     */
    public void setMuebleSeleccionado(Mueble muebleSeleccionado) {
        this.carritoComprasBean.setMuebleSeleccionado(muebleSeleccionado);
    }

    /**
     * Obtiene el carrito de compras
     * @return List<Compra>
     */
    public List<Compra> getCarritoCompras() {
        return this.carritoComprasBean.getCarritoCompras();
    }

    /**
     * Coloca el carrito de compras.
     * @param carritoCompras
     */
    public void setCarritoCompras(List<Compra> carritoCompras) {
        this.carritoComprasBean.setCarritoCompras(carritoCompras);
    }

    /**
     * Valida si se debe agregar un mueble; si está seleccionado.
     */
    public void validarAgregarMuebleSeleccionado() {
        this.carritoComprasBean.validarAgregarMuebleSeleccionado();
    }

    /**
     * Obtiene el subtotal de la compra.
     * @return double
     */
    public double getSubtotalCompra() {
        return this.carritoComprasBean.getSubtotal();
    }

    /**
     * Obtiene el valor total de la compra.
     * @return double
     */
    public double getValorTotalCompra() {
        return this.carritoComprasBean.getValorTotal();
    }

    /**
     * Obtiene la cantidad de items en el carrito.
     * @return int
     */
    public int cantidadItemsCarrito() {
        return this.carritoComprasBean.getCarritoCompras().size();
    }

    /**
     * Realiza la venta.
     * @param cliente
     * @param usuario
     */
    public void realizarVenta(Cliente cliente,Usuario usuario) {
        this.carritoComprasBean.realizarVenta(cliente, usuario);
    }

    /**
     * Obtiene las categorias valor que se están cobrando en la venta.
     * @return List<CategoriaValor>
     */
    public List<CategoriaValor> getCategoriasValor(){
        return this.carritoComprasBean.getCategoriasValor();
    }

    /**
     * Obtiene la venta actual.
     * @return Venta
     */
    public Venta getVenta(){
        return this.carritoComprasBean.getVenta();
    }

    /**
     * Coloca la venta
     * @param venta
     */
    public void setVenta(Venta venta){
        this.carritoComprasBean.setVenta(venta);
    }

    /**
     * Obtiene la descripción de la venta.
     * @return String
     */
    public String getDescripcionVenta(){
        return this.carritoComprasBean.getDescripcionVenta();
    }

    /**
     * Realiza el pago de la compra.
     */
    public void realizarPago() throws ErrorTarjetaCredito{
        this.carritoComprasBean.realizarPago();
    }

    /**
     * Cancela el pago de la compra.
     */
    public void cancelarPago(){
        this.carritoComprasBean.cancelarPago();
    }

    /**
     * Termina el proceso de pago.
     */
    public void terminarPago(){
        this.carritoComprasBean.terminarTransaccion();
    }
}